<?php
// +----------------------------------------------------------------------------
// | Tke团队版权所属 [三十年河东三十年河西,莫欺少年穷.!]
// +----------------------------------------------------------------------------
// | Copyright (c) 2014 http://www.itdaodan.com All rights reserved.
// +----------------------------------------------------------------------------
// | Author: PHP@妖孽 <dino_ma@163.com>
// +----------------------------------------------------------------------------
namespace Api\Controller;
use Think\Controller;
class PublicController extends Controller {
	/**
	 * 支付结果返回
	 */
	public function notify() {
		$apitype = strtolower(I('request.apitype'));
		if (IS_POST && !empty($_POST)) {
			//异步通知
			$notify = $_POST;
			\Think\Log::write('支付平台异步请求成功'.serialize($_REQUEST).'======'.date('Y-m-d H:i:s'),'EMERG');
		} elseif (IS_GET && !empty($_GET)) {
			$notify = $_GET;
			unset($notify['method']);
			unset($notify['apitype']);
			\Think\Log::write('支付平台同步请求成功'.serialize($_REQUEST).'======'.date('Y-m-d H:i:s'),'EMERG');
		} elseif (isset($GLOBALS['HTTP_RAW_POST_DATA'])){
				//微信服务器请求
			$notify = $GLOBALS['HTTP_RAW_POST_DATA'];
			\Think\Log::write('notify:'.json_encode($notify));
			$apitype = 'wechatpay';
		}else {
			\Think\Log::write('no','EMERG');
			exit('no');
		}
		$config	= C('payment.' . $apitype);
		if(is_null($config)){
			\Think\Log::write('支付平台请求成功,但是没有传apitype'.serialize($_REQUEST).'======'.date('Y-m-d H:i:s'),'EMERG');
			exit();
		}
		$pay = new \Think\Pay($apitype, $config);
		\Think\Log::write('notify:'.json_encode($notify));
		$is_ok = $pay->verifyNotify($notify);
		if ($is_ok) {
			//获取订单信息
			$info = $pay->getInfo();
			if ($info['status']) {
				$payinfo = M("Pay")->field(true)->where(array('out_trade_no' => $info['out_trade_no']))->find();
				if ($payinfo['status'] == 0 && $payinfo['callback']) {
					$set_fields = array('update_time' => NOW_TIME, 'status' => 1);
					if(array_key_exists('account_num', $info)){
						$set_fields['account_num']=$info['account_num'];
					}
					$is_update = M("Pay")->where(array('out_trade_no' => $info['out_trade_no']))->setField($set_fields);
					if(false === $is_update){
						\Think\Log::write('订单支付成功,但是没有成功修改状态:'.$info['out_trade_no'].'======'.date('Y-m-d H:i:s'),'EMERG');
					}
					import('Common.Msj.Curl');
					$curl_obj = new \Curl();
					$payinfo['param'] = unserialize($payinfo['param'])+ array('method'=>$apitype);
					$check = $curl_obj->curl_post($payinfo['callback'], array('money' => $payinfo['money'], 'param' => $payinfo['param']));
					\Think\Log::write('订单支付成功,return:'.json_encode(array('money' => $payinfo['money'], 'param' => $payinfo['param'])));
					if (I('get.method') == "return") {
						\Think\Log::write('订单支付成功,return:'.$info['out_trade_no'].'======'.date('Y-m-d H:i:s'),'EMERG');
						redirect($payinfo['url']);
					} else {
						\Think\Log::write('订单支付成功,并且返回success:'.$info['out_trade_no'].'======'.date('Y-m-d H:i:s'),'EMERG');
						$pay->notifySuccess();
					}
				}
				if (I('get.method') == "return") {
					redirect($payinfo['url']);
				} else {
					$pay->notifySuccess();
				}
			} else {
				\Think\Log::write('支付失败！');
			}
		} else {
			\Think\Log::write('no2','EMERG');
			exit('no2');
		}
	}
	
	


	/**
	 * @todo 创建生成密钥
	 * @Author: PHP@妖孽 <dino_ma@163.com>
	 */
// 	public function test(){
// 		$auth_id = '2';
// 		$auth_key = '^*HJKH^%*&%&^$&%^';
// 		$goods_title = '测试商品';
// 		$goods_des = '商品简介';
// 		$order_money = '1.00';//例如  1.00 2.00 小数点精确到后两位
// 		$pay_type  = 'tenpay';//支付方式
// 		$set_url	= 'http://192.168.0.116/jjhh_pay/Public/index.php?s=/Pay/order';//支付成功后回调地址;需要是一个绝对路径的Url,我这面会做验证.
// 		$call_back_url = 'http://192.168.0.116/jjhh_pay/Public';//post回去异步通知,会做这么几个事,一个是post请求你可以接收moeny,param两个参数,param参数回调的时候会记录订单号
// 		$data=array(
// 				'auth_id'=>$auth_id,
// 				'auth_key'=>$auth_key,
// 				'data'=>array(
// 						'client_order_no'=>time(),//客户端订单编号,client根据自己规则生成
// 						'goods_title'=>$goods_title,
// 						'goods_des'=>$goods_des,
// 						'order_money'=>$order_money,
// 						'set_url'=>$set_url,
// 						'call_back_url'=>$call_back_url,
// 						'pay_type'=>$pay_type, //支付方式
// 				),
// 				'action'=>'pay' //支付动作
// 		);
// 		$data['key'] = data_auth_sign($data);
// 		$this->callBackByAes($data);
// 	}
	
// 	public function refund(){
// 		$auth_id = '2';
// 		$auth_key = '^*HJKH^%*&%&^$&%^';
// 		$pay_type  = 'alipay';//支付方式
// 		$data=array(
// 				'auth_id'=>$auth_id,
// 				'auth_key'=>$auth_key,
// 				'data'=>array(
// 						'client_order_no'=>'X00000YF',
// 						'out_trade_no'=>'F4097496749432d',
// 						'pay_type'=>$pay_type, //支付方式
// 				),
// 				'action'=>'refund' //支付动作
// 		);
// 		$data['key'] = data_auth_sign($data);
// 		$this->callBackByAes($data);
// 	}
	/**
	 * @todo 获取支付平台列表
	 */
	public function getPayList(){
		$auth_id = '1';
		$auth_key = '^*&%^&$JLK^&%&^*(';
		$data=array(
				'auth_id'=>$auth_id,
				'auth_key'=>$auth_key,
				'action'=>'getPayList' //支付动作
		);
		$data['key'] = data_auth_sign($data);
		$this->callBackByAes($data);
	}
	
	
	/**
	 * @todo 订单查询
	 */
	public function getOrderQuery(){
	    $auth_id = '1';
	    $auth_key = '^*&%^&$JLK^&%&^*(';
	    $pay_type = 'Alipay';
	    $data=array(
	        'auth_id'=>$auth_id,
	        'auth_key'=>$auth_key,
	        'action'=>'getOrderQuery', //支付动作
	        'data'=>array(
	            'out_trade_no'=>'G2249267971209d',
	            'pay_type'=>$pay_type, //支付方式
	        ),
	    );
	    $data['key'] = data_auth_sign($data);
	    $this->callBackByAes($data);
	}
	
	/**
	 * @todo	生成经过Aes加密后的字符串
	 * @param  array $json_data
	 * @return string
	 * @Author: PHP@妖孽 <dino_ma@163.com>
	 *
	 *
	 * @example
	 * success::
	 * array(
	 *    'status'=>1,
	 *    'data'=>array(),
	 *   )
	 *
	 * error:
	 * array(
	 * 	'status'=>0,
	 * 	'info'=>'错误提示信息',
	 * )
	 */
	private function callBackByAes(&$return_data){
		$return_data = \Think\Crypt::encrypt(json_encode($return_data), C('PAY_SECRET_KEY'));
// 		$return_data='http://api.hrbjjhh.com/pay.html?para='.$return_data;
		$return_data='http://api.web.local/pay.html?para='.$return_data;
		echo $return_data;die;
		
		
		$return_data = "s3ynp4Woea-FfHenhoDUzYmIumSZd22ni3x7bX2dqcuye7CYnLyKp5Bqqpyei6qaeZyYpYKaipx7ooSCiHjYx7Chu52QzaengaGtmZKPr5SRh52pgZujoItriGeJeqqXun_SqpyngauBpaqcnouqmnmax2mFm6Chf6OEoY2HsduzasCbht6jbZKiopqHjM3Pf4TQn4Z1hWt_fZmxgYeuy7-yypmR3p-hnolzbQ";
		$return_data = json_decode(\Think\Crypt::decrypt($return_data, C('PAY_SECRET_KEY')),true);
		dump($return_data);die;
	}
	
	
// 	public function wx(){
// 		$auth_id = '2';
// 		$auth_key = '^*HJKH^%*&%&^$&%^';
// 		$goods_title = '测试商品';
// 		$goods_des = '商品简介';
// 		$order_money = '0.10';//例如  1.00 2.00 小数点精确到后两位
// 		$pay_type  = 'wechatpay';//支付方式
// 		$set_url	= 'http://interface.hrbjjhh.com/xpay/jjhh_pay/index.php?s=/Public/notify';//支付成功后回调地址;需要是一个绝对路径的Url,我这面会做验证.
// 		$call_back_url = 'http://interface.hrbjjhh.com/xpay/jjhh_pay/index.php?s=/Public/notify';//post回去异步通知,会做这么几个事,一个是post请求你可以接收moeny,param两个参数,param参数回调的时候会记录订单号
// 		$data=array(
// 				'auth_id'=>$auth_id,
// 				'auth_key'=>$auth_key,
// 				'data'=>array(
// 						'client_order_no'=>11111234,//客户端订单编号,client根据自己规则生成
// 						'goods_title'=>$goods_title,
// 						'goods_des'=>$goods_des,
// 						'order_money'=>$order_money,
// 						'set_url'=>$set_url,
// 						'call_back_url'=>$call_back_url,
// 						'pay_type'=>$pay_type, //支付方式
// 				),
// 				'action'=>'pay' //支付动作
// 		);
// 		$data['key'] = data_auth_sign($data);
// 		$this->callBackByAes($data);
// 	}
	
	
	
// 	public function wxwap(){
// 		$auth_id = '2';
// 		$auth_key = '^*HJKH^%*&%&^$&%^';
// 		$goods_title = '测试商品';
// 		$goods_des = '商品简介';
// 		$order_money = '0.10';//例如  1.00 2.00 小数点精确到后两位
// 		$pay_type  = 'wechatwappay';//支付方式
// 		$set_url	= 'http://interface.hrbjjhh.com/xpay/jjhh_pay/index.php?s=/Public/notify';//支付成功后回调地址;需要是一个绝对路径的Url,我这面会做验证.
// 		$call_back_url = 'http://interface.hrbjjhh.com/xpay/jjhh_pay/index.php?s=/Public/notify';//post回去异步通知,会做这么几个事,一个是post请求你可以接收moeny,param两个参数,param参数回调的时候会记录订单号
// 		$data=array(
// 				'auth_id'=>$auth_id,
// 				'auth_key'=>$auth_key,
// 				'data'=>array(
// 						'client_order_no'=>11111234,//客户端订单编号,client根据自己规则生成
// 						'goods_title'=>$goods_title,
// 						'goods_des'=>$goods_des,
// 						'order_money'=>$order_money,
// 						'set_url'=>$set_url,
// 						'call_back_url'=>$call_back_url,
// 						'pay_type'=>$pay_type, //支付方式
// 				),
// 				'action'=>'pay' //支付动作
// 		);
// 		$data['key'] = data_auth_sign($data);
// 		$this->callBackByAes($data);
// 	}
	
}



